//1.安装 npm i vuex -S
//2.导入 import Vuex from 'vuex'
//3.注册到Vue身上，Vue.use(Vuex);
//4.创建仓储对象
//const store = new Vuex.Store({ })
//5.把仓储对象挂载到Vue实例对象(vm)身上



import Vue from 'vue';
import Vuex from 'vuex';
Vue.use(Vuex);

var lsCart = JSON.parse(localStorage.getItem('cart') || '[]');

const store = new Vuex.Store({
    state:{ //访问方式：this.$store.state.cart
        cart:lsCart,
    },
    mutations:{
        // mutations里的方法至少有一个参数叫state，他就是store里的state成员，而且这个参数必须放在第一位
        // 如果方法需要有自己的参数，那么这个参数必须放在第二位
        // mutation里面定义的方法，最多只能有2个参数

        addToCart(state,goods){ //调用方法 this.$store.commit('要调用的方法名')
            // 点击添加入购物车的代码逻辑
            // 1.如果购物车中没有该商品就直接push进去
            // 2.如果购物车中有该商品，只需要修改该商品的数量
            var flag = false;
            state.cart.some(item =>{
                if(goods.id == item.id){
                    item.count +=parseInt(goods.count);
                    flag = true;
                    return true;
                }
            })
            if(!flag){
                state.cart.push(goods);
            }
            localStorage.setItem('cart',JSON.stringify(state.cart));

            // 每次仓储发生改变，都要把数据持久化到localStorage中
            // localStorage是以键值对(key:value)的形式来存储数据
            // 而value值必须是string
        },
        removeGoods(state,goodsId){
            // 遍历state.cart数组，如果有id == goodsId的对象，就帮这个对象给删了
            state.cart = state.cart.filter(item =>{
                return item.id != goodsId;
            })
            localStorage.setItem('cart',JSON.stringify(state.cart));
        },
        // 实现在购物车中，修改购买商品的个数，要把总金额同步变化
        // 1.在store.js中，提供1个修改仓储数据的方法
        // 2.让numberbox点击修改购买个数的时候调用此方法
        updataStore(state,goodsInfo){ //goodsInfo传的是对象
            // console.log('111');
            // console.log(goodsInfo);
            state.cart.forEach(item =>{
                if(item.id == goodsInfo.id){
                    item.count = goodsInfo.count;
                    // console.log(item.count);
                }
                
            })
            // 修改完更新到本地存储
            if(state.cart.length > 0){
                localStorage.setItem('cart',JSON.stringify(state.cart));
            }
        }
      
    },
    // getters里面的方法必须有返回值，mutations里面的方法没有返回值
    getters:{  //访问方式this.$store.getters.getTotalCount
        //获取仓储中cart所有商品数的总和
        getTotalCount(state){
            var total = 0;
            state.cart.forEach(item =>{
                total +=item.count;
            })
            return total;
        },
        getTotalPrice(state){
            var total  = 0;
            state.cart.forEach(item =>{
                total += item.price * item.count;
            })
            return total;
        }
    }
})

export default store;
